/*
 * @Author: weiting112 10254483+weiting112@user.noreply.gitee.com
 * @Date: 2022-08-17 16:22:03
 * @LastEditors: weiting112 10254483+weiting112@user.noreply.gitee.com
 * @LastEditTime: 2022-08-18 11:25:38
 * @FilePath: \数组api重构\2-数组去重.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// 1、将数组的第一个元素放入新数组中，再将剩下的元素与新数组中的元素进行比较，不同则放入数组中。
function unique(arr) {
  let newArr = [arr[0]];
  for (let i = 1; i < arr.length; i++) {
      let repeat = false;
      for (let j = 0; j < newArr.length; j++) {
          if (arr[i] === newArr[j]) {
              repeat = true;
              break;
          }else{
              
          }
      }
      if (!repeat) {
          newArr.push(arr[i]);
      }
  }
  return newArr;
}

console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 结果是[1, 2, 3, 5, 6, 7, 4]


// // 2、数组去重
var arr = [1,2,1,3,2,'hello','hello']
function unique(arr) {
  // 1、双层for循环
for (let i = 0; i < arr.length; i++) {
  for (let j = i+1; j < arr.length; j++) {
      // 判断前后是否相等
      if(arr[i]==arr[j]){
        // 删除元素
        arr.splice(j,1)
        // 修正下标
        j--;
      }
  }
}
}
unique(arr)
console.log(arr);//splice修改原数组

// // 3、indexOf数组去重 3、lastIndexOf
var arr = [1,2,3,3,2,'hello','hello']
function unqiue(arr) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if(newArr.indexOf(arr[i])===-1){
      newArr.push(arr[i])
    } 
  }
  return newArr
}

// 4、includes
var arr = [1,23,3,2,'hello','hello']
function unqiue(arr) {
  let newArr = []
  for (let i = 0; i < arr.length; i++) {
   if(!newArr.includes(arr[i]))
      newArr.push(arr[i])
  }
  return newArr
}
console.log(unqiue(arr));

// // // 5、forEach+indexOf
var arr = [1,23,3,2,'hello','hello']
function unqiue(arr) {
  let newArr = []
  arr.forEach(function (item) {
    if(arr.indexOf(arr[i])==-1){
      newArr.push(arr[i])
    }
  })
  return newArr
}
unique(arr)
console.log(newArr);

// // 6、filter + include
var arr = [1,2,3,3,2,'hello','hello']
function unique(arr) {
  let newArr = []
  return arr.filter(function (item) {
    return newArr.includes(item)?'':newArr.push(item)
  })
}
// unique(arr)
console.log(unique(arr));

// // // 7、set去重
var arr = [1,23,3,2,'hello','hello']
function unique(arr) {
  return Array.from(new Set(arr))
}
console.log(unique(arr));


// 8、使用sort将数组元素排序，前后数组元素比对
function unique2(arr) {
  var formArr = arr.sort()
  console.log(formArr);
  var newArr=[formArr[0]]
  for (let i = 1; i < formArr.length; i++) {
      if (formArr[i]!==formArr[i-1]) {
          newArr.push(formArr[i])
      }
  }
  return newArr
}
console.log(unique2([1, 1, 2, 3, 5, 'hello', 1, 5, 6, 7, 'hello']));
// 结果是[1, 2, 3,  4,5, 6, 7]


// 9、使用对象的存在属性解决
function unique3(arr) {
  var obj={}
  var newArr=[]
  for (let i = 0; i < arr.length; i++) {
      if (!obj[arr[i]]) {
          obj[arr[i]] = 1
          newArr.push(arr[i])
      }   
  }
  return newArr
}
console.log(unique2([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
